1、链表每k个节点旋转
思想：递归，但是要确定旋转后指针的指向
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* reverse(ListNode* head,ListNode* tail)
    {
        ListNode* n1=nullptr;
        ListNode* n2=head;
        ListNode* n3=head->next;
        while(n2!=tail)
        {
            n2->next=n1;
            n1=n2;
            n2=n3;
            n3=n3->next;
        }
        return n1;
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here
        if(head==nullptr||head->next==nullptr)
            return head;
        ListNode* tail=head;
        for(int i=0;i<k;i++)
        {
            //如果剩下的节点个数小于k，直接返回
            if(tail==nullptr)
                return head;
            tail=tail->next;
        }
        //反转前k个节点
        ListNode* newnode=reverse(head,tail);
        head->next=reverseKGroup(tail,k);
        return newnode;
    }
};
2、